#include <iostream>
using namespace std;

template<typename T>
class A 
{
public:
	A(T t)
	{
		this->t = t;
	}

	T &getT()
	{
		return t;
	}
	
public:
	T t;
};
//从模板类派生普通类
//子类从模板类继承的时候,需要让编译器知道 父类的数据类型具体是什么(数据类型的本质:固定大小内存块的别名)A<int> 
class B : public A<int>
{
public:
	B(int i) : A<int>(i)//父类只提供有参构造函数，派生时需要提供初始化列表

	{
         t=i;
	}
	int &getT()
	{
		return t;
	}
};
//从模板类派生模板类
template<typename T>
class C : public A<T>
{
public:
	C(T c,T a) : A<T>(a)
	{
		this->c = c;
	}

	T &getC()
	{
		return c;
	}
	
public:
	T c;
};


int main()
{
	A<int>  a(100); 

	B b(10);

    C<int> cc(1,7);

	return 0;
}